package org.tissou.server.Services;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import org.tissou.client.Services.UltraSimpleTransactionService;
import org.tissou.client.Services.MonException;
import org.tissou.client.Services.Dette;
import org.tissou.client.Services.Compte;
import org.tissou.client.Panel_Premier.operations_tab.Operations.Operation_AchatRecette;
import org.tissou.server.Utils.Variables_Globales;
import org.tissou.server.Base.Proprietaire;
import org.tissou.server.importer.MappeurDeCategorie;
import org.tissou.server.importer.MappeurQuoiVersCategorie;
import org.tissou.server.Operations.Operation_Depense;

import java.util.ArrayList;
import java.util.List;
import java.util.Date;

/**
 * Rentre une transaction ultra simple
 */
public class UltraSimpleTransactionServiceImpl extends RemoteServiceServlet implements UltraSimpleTransactionService {
  public void entrerTransaction(String dequi, String nomCompte, String quoi, float combien, String aqui, float pourcentage)
      throws MonException {
    Proprietaire qui = Variables_Globales.ListeProprietaire.ObtenirProprietaire(dequi);
    List<Dette> listeDettes = new ArrayList<Dette>();

    if (qui == null) {
      throw new MonException("Mauvais Proprietaire");
    }
    Compte c = qui.ObtenirCompte(nomCompte);

    if (c == null) {
      throw new MonException("Mauvais nom du compte");
    }
    if (quoi == null) {
      throw new MonException("Mauvaise categorie");
    }

    if (combien <= 0f) {
      throw new MonException("Pas de somme");
    }

    MappeurDeCategorie mappeur = new MappeurQuoiVersCategorie(quoi);

    if (aqui != null && !aqui.equals("")) {

      Proprietaire avecQui = Variables_Globales.ListeProprietaire.ObtenirProprietaire(aqui);

      if (avecQui == null) {
        throw new MonException("Mauvais 2eme Proprietaire");
      }

      if (pourcentage <= 0f || pourcentage > 1f) {
        throw new MonException("Mauvais pourcentage");
      }

      float detteCombien = combien * pourcentage;

      Dette d = new Dette(qui.getInfos(), avecQui.getInfos(), detteCombien);
      listeDettes.add(d);
    }

    Operation_Depense op = new Operation_Depense(new Date(), c, mappeur.getCategorie(),
        mappeur.getLibelle(), combien, true, listeDettes);

    op.Entrer_Transactions();
  }


}